# 同样的行为(函数)。
# 传入不同的对象，得到不同的状态

class Animal:
    def speak(self):
        pass


class Cat(Animal):
    def speak(self):
        print("喵喵喵")


class Dog(Animal):
    def speak(self):
        print("汪汪汪")


def makeNoise(animal: Animal):
    animal.speak()


makeNoise(Cat())
makeNoise(Dog())
"""
这种设计的含义是:
父类用来确定有哪些方法.
具体的方法实现，由子类自行决定

这种写法，就叫做抽象类( 也可以称之为接口)
抽象类:含有抽象方法的类称之为抽象类
抽象方法:方法体是空实现的(pass) 称之为抽象方法
"""

"""
抽象类就好比定义一个标准，
包含了一些抽象的方法,要求子类必须实现。
"""


# 演示抽象类
class AC:
    def cool_wind(self):
        pass

    def hot_wind(self):
        pass

    def swing_lr(self):
        pass


class Meidi(AC):
    def cool_wind(self):
        print("美的空调核心制冷")

    def hot_wind(self):
        print("美的空调核心制热")

    def swing_lr(self):
        print("美的空调核心左右吹风")


class Xiaomi(AC):
    def cool_wind(self):
        print("小米空调核心制冷,省电省钱")

    def hot_wind(self):
        print("小米空调核心制热")

    def swing_lr(self):
        print("小米空调核心左右吹风")


meidi = Meidi()
xiaomi = Xiaomi()


def open_cool(ac: AC):
    ac.cool_wind()


open_cool(meidi)
open_cool(xiaomi)
